#include<stdio.h>
/*#include<conio.h>*/
#define MAXVALUE 1000000l
long c[2229][60][2];
long d[2229][60];
int n,m,visited[2225][60];
void init(){
    int i,j;
    /*for(j=1;j<=n;j++)*/
    for(i=0;i<=m;i++)
        for(j=1;j<=n;j++){
            d[i][j]=MAXVALUE;
            visited[i][j]=0;
        }
    d[0][1]=0;
}
void input(){
    int i,j;
    /*FILE *fp=fopen("BIN.INP","r");*/
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            scanf("%d",&c[i][j][0]);
        }
        for(j=2;j<=n;j++)
            scanf("%d",&c[i][j][1]);
    }
    /*fclose(fp);*/
}
void process(){
    int u,v,i,j;
    long max;
    do{
        max=MAXVALUE;
        for(i=0;i<=m;i++)
            for(j=1;j<=n;j++)
                if(!visited[i][j] && d[i][j]<max){
                    u=i;
                    v=j;
                    max=d[i][j];
                }
        visited[u][v]=1;
        if(max==MAXVALUE)break;
        /*printf("%d %d --> %ld\n",u,v,max);*/
        /* Ben tren */
        if((u>0) && (d[u-1][v]>d[u][v]+c[u][v][0]))d[u-1][v]=d[u][v]+c[u][v][0];
        /* Phia duoi */
        if((u<m) && (d[u+1][v]>d[u][v]+c[u+1][v][0]))d[u+1][v]=d[u][v]+c[u+1][v][0];
        
        
        /* Ben trai */
        if((v>1) && (d[u][v-1]>d[u][v]+c[u][v][1]))d[u][v-1]=d[u][v]+c[u][v][1];
        /* Ben phai */
        if((v<n) && (d[u][v+1]>d[u][v]+c[u][v+1][1]))d[u][v+1]=d[u][v]+c[u][v+1][1];
    }while(1);
}
int main(){
    input();
    init();
    process();
    printf("%ld",d[m][n]);
    /*/getch();*/
    return 0;
}

